package com.grad.webstudy.dao;

import com.grad.webstudy.dto.CourseDto;
import com.grad.webstudy.model.Course;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;


@Repository
public interface CourseDao {
    int deleteByPrimaryKey(Integer id);


    int insertSelective(Course record);

    Course selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Course record);

    int updateByPrimaryKey(Course record);


    /**
     * 增加课程信息
     * @param record
     * @return
     */
    int insert(Course record);

    /**
     * 删除课程
     * @param ids
     * @return
     */
    int deleteCourses(List<String> ids);


    /**
     * 更新课程基本信息
     * @param courseDto
     * @return
     */
    int updateCourseInfo(CourseDto courseDto);


    /**
     * 更新课程状态
     * @param id
     * @param status
     * @return
     */
    int changeCourseStatus(@Param("id") Integer id,@Param("status") Integer status);


    /**
     * 更新课程的学习人数，每调用一次就+1即可
     * @param id
     * @return
     */
    int updateStudyNumber(Integer id);


    /**
     * 更新课程的分数以及打分的人数，每更新一次打分人数+1即可
     * @param id
     * @param score
     * @return
     */
    int updateScoreAndNumber(@Param("id") Integer id,@Param("score") Float score);


    /**
     * 获取打分人数
     * @param id
     * @return
     */
    Map<Integer,Float> getRatingNumberAndScore(Integer id);


    /**
     * 查询全部信息
     * @return
     */
    List<Course> queryAll(@Param("status") Integer status,
                          @Param("level") Integer level,
                          @Param("typeId") Integer typeId,
                          @Param("keyword") String keword);


    /**
     * 关键字模糊查询
     * @param keyWord
     * @param status
     * @return
     */
    List<Course> queryByKeyWords(@Param("keyWord") String keyWord,@Param("status") Integer status);


    /**
     * 根据id查询课程信息
     * @param id
     * @param status
     * @return
     */
    Course queryById(@Param("id") Integer id,@Param("status") Integer status);


    /**
     * 根据类型id查询课程信息
     * @param typeIds
     * @param status
     * @return
     */
    List<Course> queryCourseByType(@Param("typeIds") List<Integer> typeIds,@Param("status") Integer status);


    /**
     * 统计课程数量
     * @return
     */
    Integer queryCourseCount();


    /**
     * 统计近期课程
     * @return
     */
    List<Course> queryCourseNew();


    /**
     * 查看难度在中级以下的课程
     * @return
     */
    List<Course> queryCourseByLevel(List<Integer> level);



    /**
     * 查询前沿课程
     * @param typeId 前沿类别id
     * @return
     */
    List<Course> queryCourseFront(Integer typeId);
}